From: Dan Winship Date: Tue, 18 May 2010 17:23:41 +0000 (-0400) Subject: [panel] separate "active" state from hover state in PanelBaseMenuItem X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~10069 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2179f5836e47179126ba1c521f58f715bb58ec22;p=gnome-shell.git [panel] separate "active" state from hover state in PanelBaseMenuItem When doing keyboard navigation, the active menu item may not be the one under the mouse. https://bugzilla.gnome.org/show_bug.cgi?id=619008 --- diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css index 3367c576d..93cb4b3b0 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css @@ -142,7 +142,7 @@ StTooltip { padding: 6px 20px; } -.panel-menu-item:hover { +.panel-menu-item:active { background-color: #4c4c4c; } diff --git a/js/ui/panel.js b/js/ui/panel.js index 05c58ef25..9c311a5e3 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -138,11 +138,34 @@ PanelBaseMenuItem.prototype = { x_fill: true, y_fill: true, x_align: St.Align.START }); + this.active = false; if (reactive) { this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) { this.emit('activate', event); })); + this.actor.connect('notify::hover', Lang.bind(this, this._hoverChanged)); + } + }, + + _hoverChanged: function (actor) { + this.setActive(actor.hover); + }, + + activate: function (event) { + this.emit('activate', event); + }, + + setActive: function (active) { + let activeChanged = active != this.active; + + if (activeChanged) { + this.active = active; + if (active) + this.actor.add_style_pseudo_class('active'); + else + this.actor.remove_style_pseudo_class('active'); + this.emit('active-changed', active); } } };